<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  <title>VI</title>
 
</head>
<body style='line-height:26px;white-space:pre-wrap;'>

   
    esc after

    w 向后移一个单词前
    e 向后移一个单词后
    n 在查找之间切换
    撤销操作
    u命令取消最近一次的操作，可以使用多次来恢复原有的操作
    U取消所有操作
    Ctrl+R可以恢复对使用u命令的操作

复制操作
    yy命令复制当前整行的内容到vi缓冲区
    yw复制当前光标所在位置到单词尾字符的内容到vi缓存区，相当于复制一个单词
    y$复制光标所在位置到行尾内容到缓存区
    y^复制光标所在位置到行首内容到缓存区
    #yy例如：5yy就是复制5行
    #yw例如：2yw就是复制两个单词

删除操作(命令模式使用)
    x删除光标处的单个字符
    dd删除光标所在行
    dw删除当前字符到单词尾包括空格的所有字符
    #x例如3x删除光标处向右的三个字符
    #dd例如3dd从当前行开始向下删除三行文本

    粘贴缓冲区中的内容，用p

替换
    vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换，今天发现该命令有很多种写法(vi 真是强大啊，还有很多需要学习)，记录几种在此，方便以后查询。
    :s/vivian/sky/ 替换当前行第一个 vivian 为 sky
    :s/vivian/sky/g 替换当前行所有 vivian 为 sky
    :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
    :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
    n 为数字，若 n 为 .，表示从当前行开始到最后一行
    :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
    :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
    可以使用 # 作为分隔符，此时中间出现的 / 不会作为分隔符
    :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
    :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / )： /oradata/apras/替换成/user01/apras1/
    :%s/[Ctrl-v][Enter]//g 删除DOS方式的回车^M
    :%s= *$== 删除行尾空白
    :%!sort -u 删除重复行
    :%s/^.{-}pdf/new.pdf/ 只是删除第一个pdf
    :%s/// 删除多行注释
    :g/^$/d 删除所有空行
    :g!/^dd/d 删除不含字符串'dd'的行
    :v/^dd/d 删除不含字符串'dd'的行
    :g/str1/,/str2/d 删除所有第一个含str1到第一个含str2之间的行
    :v/./.,/./-1join 压缩空行
    :g/^$/,/./-j 压缩空行
    ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。
    d0 删至行首。
    d$ 删至行尾。
    ndd 删除当前行及其后 n-1 行。
    x 或 X 删除一个字符。
    Ctrl+u 删除输入方式下所输入的文本。
    D 删除到行尾
    x,y 删除与复制包含高亮区
    dl 删除当前字符（与x命令功能相同）
    d0 删除到某一行的开始位置
    d^ 删除到某一行的第一个字符位置（不包括空格或TAB字符）
    dw 删除到某个单词的结尾位置
    d3w 删除到第三个单词的结尾位置
    db 删除到某个单词的开始位置
    dW 删除到某个以空格作为分隔符的单词的结尾位置
    dB 删除到某个以空格作为分隔符的单词的开始位置
    d7B 删除到前面7个以空格作为分隔符的单词的开始位置
    d） 删除到某个语句的结尾位置
    d4） 删除到第四个语句的结尾位置
    d（ 删除到某个语句的开始位置
    d） 删除到某个段落的结尾位置
    d{ 删除到某个段落的开始位置
    d7{ 删除到当前段落起始位置之前的第7个段落位置
    dd 删除当前行
    d/text 删除从文本中出现“text”中所指定字样的位置，一直向前直到下一个该字样所出现的位置（但不包括该字样）之间的内容
    dfc 删除从文本中出现字符“c”的位置，一直向前直到下一个该字符所出现的位置（包括该字符）之间的内容
    dtc 删除当前行直到下一个字符“c”所出现位置之间的内容
    D 删除到某一行的结尾
    d$ 删除到某一行的结尾
    5dd 删除从当前行所开始的5行内容
    dL 删除直到屏幕上最后一行的内容
    dH 删除直到屏幕上第一行的内容
    dG 删除直到工作缓存区结尾的内容
    d1G 删除直到工作缓存区开始的内容
    删除列
    光标先移动到第一行，第一列，然后按ctrl   +   v，
    然后把光标移动到第三行，第三列，再按x键。就可以删除前三行前三列。
    删除行
    光标先移动到第一行，第一列，然后按shift   +   v，
    然后把光标移动到第三行，第三列，再按x键。就可以删除前三行前三列。
    dw是删除一个单词，包括后面的空格，de与dw类似，但是不包括空格
    恢复是u和U啦，小u执行一次恢复，大U则恢复所以之前的改动
    x是删除当前光标位置的字符，X是删除当前光标位置的前面一个字符。


vim +20 filename
从二十行开始编辑

vim +/abc filename
搜索abc并开始编辑

</body>
</html>

